# This Python file uses the following encoding: utf-8

from django.db import models
#from django.contrib.auth.models import User
from alumnes.models import Curs, Grup
from assignatures.models import Assignatura
from usuaris.models import Professor

class DiaDeLaSetmana(models.Model):
    id_dia_de_la_setmana = models.AutoField(primary_key=True)
    n_dia_uk = models.IntegerField(u'Número de dia de la setmana a UK (0=diumenge)',db_column='n_dia_uk', unique=True) 
    n_dia_ca = models.IntegerField(u'Número de dia de la setmana aquí (0=dilluns)',db_column='n_dia_ca', unique=True) 
    dia_2_lletres = models.CharField("Dia",max_length=6, unique=True)
    dia_de_la_setmana = models.CharField("Dia de la setmana",max_length=45, unique=True)
    es_festiu = models.BooleanField(u'És festiu?')
    class Meta:
        ordering = ['n_dia_ca']
        db_table = u'dia_de_la_setmana'
        verbose_name = u'Dia de la Setmana'
        verbose_name_plural = u'Dies de la Setmana'
    def __unicode__(self):
        return self.dia_de_la_setmana

class FranjaHoraria(models.Model):
    id_franja_horaria = models.AutoField(primary_key=True)
    hora_inici = models.TimeField(unique=True) 
    hora_fi = models.TimeField(unique=True)
    nom_franja = models.CharField(max_length=45, blank=True)  
    class Meta:
        ordering = ['hora_inici']
        db_table = u'franja_horaria'
        verbose_name = u'Franja Horària'
        verbose_name_plural = u'Franges Horàries'
    def __unicode__(self):
        return  self.nom_franja if self.nom_franja else  unicode(self.hora_inici)[0:5] + ' a ' + unicode(self.hora_fi)[0:5]

#------------------------------------------------------------------------------------------------

class Horari(models.Model):
    id_horari = models.AutoField(primary_key=True)
    assignatura = models.ForeignKey(Assignatura, null=True, db_column='id_assignatura', blank=True)
    professor = models.ForeignKey(Professor, null=True, db_column='id_professor', blank=True, db_index=True)
    grup = models.ForeignKey(to='alumnes.Grup', null=True, db_column='id_grup', blank=True, db_index=True)
    dia_de_la_setmana = models.ForeignKey(DiaDeLaSetmana, db_column='id_dia_de_la_setmana')
    hora = models.ForeignKey(FranjaHoraria, db_column='id_franja_horaria')
    nom_aula = models.CharField(max_length=45, blank=True)
    es_actiu = models.BooleanField()
    estat_sincronitzacio = models.CharField(max_length=3, blank=True)

    class Meta:
        ordering=['es_actiu', 'professor','dia_de_la_setmana__n_dia_ca','hora__hora_inici']
        db_table = u'horari'
        verbose_name = u'Entrada a l\'Horari'
        verbose_name_plural = u'Entrades a l\'Horari'

    def __unicode__(self):
        obsolet = u'(Obsolet:) ' if not self.es_actiu else ''
        aula = u' a l\'aula ' + self.nom_aula if self.nom_aula else ''
        grup = u' al grup ' + unicode( self.grup) if self.grup else ''
        return obsolet + u'El professor ' + unicode( self.professor) + u' imparteix ' + unicode(self.assignatura) + ' el ' + unicode( self.dia_de_la_setmana) + ' de ' +  unicode(self.hora) + aula + grup

    def grupsPotencials(self):
        grups_potencials = None
        codi_ambit = self.assignatura.tipus_assignatura.ambit_on_prendre_alumnes if self.assignatura.tipus_assignatura is not None else 'G'
        if codi_ambit == 'I':
            grups_potencials= Grup.objects.all( )
        elif codi_ambit == 'N':
            grups_potencials= Grup.objects.filter( curs__nivell = self.grup.curs.nivell  )
        elif codi_ambit == 'C':
            grups_potencials= Grup.objects.filter( curs = self.grup.curs  )
        elif codi_ambit == 'G':
            grups_potencials=Grup.objects.filter( pk = self.grup.pk  )
        return grups_potencials


#------------------------------------------------------------------------------------------------

class Festiu(models.Model):
    id_festiu = models.AutoField(primary_key=True)
    curs = models.ForeignKey(Curs, null=True, db_column='id_curs', blank=True)
    data_inici_festiu = models.DateField()
    franja_horaria_inici = models.ForeignKey(FranjaHoraria, related_name='hora_inici_festiu', db_column='id_franja_horaria_inici')
    data_fi_festiu = models.DateField()
    franja_horaria_fi = models.ForeignKey(FranjaHoraria, related_name='hora_fi_festiu', db_column='id_franja_horaria_fi')
    descripcio = models.CharField(max_length=45)
    #objects = FestiuManager
    
    class Meta:
        ordering = ['data_inici_festiu','franja_horaria_inici']
        db_table = u'festiu'
        verbose_name = u'Entrada al calendari de festius'
        verbose_name_plural = u'Entrades al calendari de festius'

    def __unicode__(self):
        curs =  u'(' + unicode( self.curs ) + u')' if self.curs else u''
        return  self.descripcio + curs
    
#comprova si un dia és festiu. Funciona encara que no li passem curs.    
def esFestiu( curs, dia, hora ):
    #festiu per tots:
    from django.db.models import Q

    #
    #comprovo si es festa:
    #
    q_festiu_curs_o_tots =   Q( curs__isnull = True) 
    if curs:
        q_festiu_curs_o_tots |=Q( curs = curs ) 
    
    q_ini = Q(data_inici_festiu__lt = dia) | ( Q(data_inici_festiu = dia) &Q(franja_horaria_inici__hora_inici__lte = hora.hora_inici) )
    q_fin = Q(data_fi_festiu__gt = dia) | ( Q(data_fi_festiu = dia) &Q(franja_horaria_fi__hora_inici__gte = hora.hora_inici) )

    
    if Festiu.objects.filter( q_ini & q_fin & q_festiu_curs_o_tots ).count() > 0: return True
    
    #
    #comprovo si és fora del curs
    #
    if curs and curs.data_inici_curs and curs.data_fi_curs:
        data_inici_curs = curs.data_inici_curs
        data_fi_curs   = curs.data_fi_curs
        
        mig = data_inici_curs <= dia <= data_fi_curs
        return not mig     

    return False


    

